home *** CD-ROM | disk | FTP | other *** search
- ***********************************************************
- * This little program shows how to use the BPLxMOD registers
- * to produce a neat "wavy" effect.
- * 1992 Epsilon
- ***********************************************************
-
- WaitVblank MACRO
- .\@1 move.l 4(a5),d0
- andi.l #$3ff00,d0
- cmpi.l #$0f300,d0
- bne.b .\@1
- .\@2 move.l 4(a5),d0
- andi.l #$3ff00,d0
- cmpi.l #$0f400,d0
- bne.b .\@2
- ENDM
-
- ***********************************************************
-
- bsr.w TakeSystem
- MouseWait: WaitVblank ; wait for two or it goes too fast.
- WaitVblank
-
- bsr.s DoWaves
-
- btst.b #6,$bfe001
- bne.s MouseWait
-
- bsr.w RestoreSystem
- rts ; Done!
-
- ***********************************************************
-
- DoWaves: lea wavestart+6,a1 ; first line to wave in copper
- moveq #13,d0 ; number of times to loop
- move.l Wave_Ptr,a0 ; move ptr. to table to a0
- cmpi.w #$ffff,(a0) ; end of list?
- bne.s wave_it ; no
- lea Wave_Table,a0 ; start of list
-
- wave_it: move.w (a0)+,(a1)+ ; move new modulo value to copper
- addq.l #6,a1 ; get next line in copper
- cmpi.w #$ffff,(a0) ; end of list?
- bne.s wave_ok ; no
- lea Wave_Table,a0 ; back to start of wave table
- wave_ok: dbra d0,wave_it ; loop
-
- move.l a0,Wave_Ptr ; new position in table
- rts
-
- ***********************************************************
-
- TakeSystem: move.l #$dff000,a5 ; Custom chip base
-
- bsr.w InstallBmap
- bsr.w InstallSprites
- move.l #Copper,$80(a5) ; install copper
- rts ; Done
-
- ***********************************************************
-
- RestoreSystem: move.l #$dff000,a5 ; Custom chip base
-
- movea.l 4.w,a6 ; ExecBase
- lea GraphicsName,a1 ; "graphics.library"
- jsr -$198(a6) ; OldOpenLibrary()
- move.l d0,a1 ; Copy ptr to GfxBase
- move.l $26(a1),$80(a5) ; Install old system copperlist
- jsr -$19e(a6) ; CloseLibrary()
- jsr -$8a(a6) ; Permit() multitasking
- rts ; Done
-
- ***********************************************************
-
- InstallBmap: lea bmapptrs+2,a0
- move.l #Bmap,d0 ; say our bmap address is $12345678
- move.w d0,4(a0) ; write $5678 to $e2 reg in clist
- swap d0
- move.w d0,(a0) ; write $1234 to $e0
- rts
-
- ***********************************************************
-
- InstallSprites: lea sprptrs+2,a0
- move.l #NullSprite,d0
- move.w d0,4(a0)
- move.w d0,12(a0)
- move.w d0,20(a0)
- move.w d0,28(a0)
- move.w d0,36(a0)
- move.w d0,44(a0)
- move.w d0,52(a0)
- move.w d0,60(a0)
- swap d0
- move.w d0,(a0)
- move.w d0,8(a0)
- move.w d0,16(a0)
- move.w d0,24(a0)
- move.w d0,32(a0)
- move.w d0,40(a0)
- move.w d0,48(a0)
- move.w d0,56(a0)
- rts
-
- ***********************************************************
-
- section amazin_fruit,data
-
- Wave_Table:
- dc.w 40,0,0,0,0,0,0 ; each raster line if 40 bytes
- dc.w 0,0,0,0,0,0,0 ; wide, so it is best to skip
- dc.w 40,0,0,0,0,0,0 ; a multipe of 40
- dc.w 0,0,0,0,0,0,0 ; a value of 40 skips on line
- dc.w 40,0,40,0,0,0,0 ; and a value of -40 does the
- dc.w 0,0,0,0,0,0,0 ; same line twice
- dc.w 40,0,40,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,40,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,40,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,40,0,40
-
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,40,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,40,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,40,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 40,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,40
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,40,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,40,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 40,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
-
- dc.w -40,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,40,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,40,-40,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,40,-40,40,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,40,-40,40,-40
-
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,40,-40,40,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,40,-40,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,40,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,-40,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,40,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w -40,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,-40
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,40,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,-40,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,40,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,-40,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,40,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w -40,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0
- dc.w $ffff ; end of list
-
- Wave_Ptr: dc.l Wave_Table ; address of wave table
-
- GraphicsName: dc.b 'graphics.library',0
- EVEN
-
- ***********************************************************
-
- section squid,data_c
-
- Copper: dc.w $0100,$1200 ; bit plane control reg.0
- dc.w $0102,$0000 ; scroll value
- dc.w $0104,$0000 ; blp/sprite priority reg.
- dc.w $0108,$0000 ; odd bitplane modulo value
- dc.w $010a,$0000 ; even bitplane modulo value
- dc.w $0180,$0000 ; color00 = black
- dc.w $0182,$0fff ; color01 = white
- dc.w $008e,$2c81 ; upper left corner of disp. window
- dc.w $0090,$f4c1 ; lower right corner of disp. window
- dc.w $0092,$0038 ; start of bpl. (horizontal)
- dc.w $0094,$00d0 ; endo of bpl. (horizontal)
- bmapptrs:dc.w $00e0,$0000 ; adr of bplane 1 (long - 2 words)
- dc.w $00e2,$0000 ; low word of bplane 1 adr
- sprptrs:dc.w $0120,$0000
- dc.w $0122,$0000
- dc.w $0124,$0000
- dc.w $0126,$0000
- dc.w $0128,$0000
- dc.w $012a,$0000
- dc.w $012c,$0000
- dc.w $012e,$0000
- dc.w $0130,$0000
- dc.w $0132,$0000
- dc.w $0134,$0000
- dc.w $0136,$0000
- dc.w $0138,$0000
- dc.w $013a,$0000
- dc.w $013c,$0000
- dc.w $013e,$0000
- wavestart:
- dc.w $510f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $520f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $530f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $540f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $550f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $560f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $570f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $580f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $590f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $5a0f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $5b0f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $5c0f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $5d0f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $5e0f,$fffe,$0108,$0000 ; odd bitplane modulo value
- dc.w $810f,$fffe,$0182,$0000
- dc.l -2,-2
-
- NullSprite: dc.l 0,0,0 ; 2 controll words,2 data words,2 blank words
-
- Bmap: incbin "fun.raw"
-
-